package com.biosimilarity.reflection.model.paratrope;
import com.biosimilarity.reflection.model.paratrope.Absyn.*;
/*** BNFC-Generated Visitor Design Pattern Skeleton. ***/
/* This implements the common visitor design pattern.
   Tests show it to be slightly less efficient than the
   instanceof method, but easier to use. 
   Replace the R and A parameters with the desired return
   and context types.*/

public class VisitSkel
{
  public class ProcessExprVisitor<R,A> implements ProcessExpr.Visitor<R,A>
  {
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Composition p, A arg)
    {
      /* Code For Composition Goes Here */

      for (ProcessExpr x : p.listprocessexpr_) {
      }

      return null;
    }
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Reception p, A arg)
    {
      /* Code For Reception Goes Here */

      p.nominal_.accept(new NominalVisitor<R,A>(), arg);
      p.abstraction_.accept(new AbstractionVisitor<R,A>(), arg);

      return null;
    }
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Transmission p, A arg)
    {
      /* Code For Transmission Goes Here */

      p.nominal_.accept(new NominalVisitor<R,A>(), arg);
      p.concretion_.accept(new ConcretionVisitor<R,A>(), arg);

      return null;
    }
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Transcription p, A arg)
    {
      /* Code For Transcription Goes Here */

      p.nominal_.accept(new NominalVisitor<R,A>(), arg);

      return null;
    }
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Termination p, A arg)
    {
      /* Code For Termination Goes Here */


      return null;
    }

  }
  public class AbstractionVisitor<R,A> implements Abstraction.Visitor<R,A>
  {
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Suspension p, A arg)
    {
      /* Code For Suspension Goes Here */

      p.formals_.accept(new FormalsVisitor<R,A>(), arg);
      p.processexpr_.accept(new ProcessExprVisitor<R,A>(), arg);

      return null;
    }

  }
  public class ConcretionVisitor<R,A> implements Concretion.Visitor<R,A>
  {
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Provision p, A arg)
    {
      /* Code For Provision Goes Here */

      p.actuals_.accept(new ActualsVisitor<R,A>(), arg);

      return null;
    }

  }
  public class NominalVisitor<R,A> implements Nominal.Visitor<R,A>
  {
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.AtomLiteral p, A arg)
    {
      /* Code For AtomLiteral Goes Here */

      //p.ident_;

      return null;
    }
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Encoding p, A arg)
    {
      /* Code For Encoding Goes Here */

      p.processexpr_.accept(new ProcessExprVisitor<R,A>(), arg);

      return null;
    }

  }
  public class FormalsVisitor<R,A> implements Formals.Visitor<R,A>
  {
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Obligation p, A arg)
    {
      /* Code For Obligation Goes Here */

      for (Nominal x : p.listnominal_) {
      }

      return null;
    }

  }
  public class ActualsVisitor<R,A> implements Actuals.Visitor<R,A>
  {
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Remittance p, A arg)
    {
      /* Code For Remittance Goes Here */

      for (ProcessExprPlus x : p.listprocessexprplus_) {
      }

      return null;
    }

  }
  public class ProcessExprPlusVisitor<R,A> implements ProcessExprPlus.Visitor<R,A>
  {
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Value p, A arg)
    {
      /* Code For Value Goes Here */

      p.processexpr_.accept(new ProcessExprVisitor<R,A>(), arg);

      return null;
    }
    public R visit(com.biosimilarity.reflection.model.paratrope.Absyn.Variable p, A arg)
    {
      /* Code For Variable Goes Here */

      p.nominal_.accept(new NominalVisitor<R,A>(), arg);

      return null;
    }

  }
}